身為一名 Ruby on Rails 工程師,幾乎都有寫過 RSpec,
測試本身與開發是一樣重要的,有聽過一詞是開發時間緊迫,沒時間寫測試,
要趕在截止日前完成功能,都要來不及了,有空再補...(通常就是沒下文
後續的維護成本、技術債反而會更高,
且要修改時,若有測試涵蓋的話,也比較不用擔心改 A 壞 B,
還能幫助你避開低級錯誤 (像是語法錯誤等)
後續的文章會以此 repo 作為範例
放在 :development, :test
group 裡面,或參考此 commit
參考資料: https://relishapp.com/rspec/rspec-rails/docs
# Gemfile
gem 'rspec-rails', '~> 4.0.0'
# 記得要 bundle
接著再終端機輸入,可參考此 commit
rails generate rspec:install
# 也可縮寫成
rails g rspec:install
由於之前已經透過 scaffold
建立 User
欲透過指令補產生相關測試檔案的話,在終端機輸入以下
rails g rspec:scaffold user
若不透過指令,也可手動新增檔案,或參考此 commit
rails g -h
的技巧,看有哪些參數可以使用 (若不清楚,可以看前面寫的 Linux 指令文章 man
、help
、tldr
,非常受用的技巧)終端機輸入
# 跑全部的測試
rspec
rspec spec
# 跑特定資料夾的測試
rspec spec/routing/
# 跑特定檔案的測試
rspec spec/routing/users_routing_spec.rb
# 跑特定檔案某一個測試
rspec spec/routing/users_routing_spec.rb:22
將原本 CI 設定檔新增以下,可參考此 commit
bundle exec rspec
想提升自己 RSpec 寫法的話,可參考 Better Specs 此網站
測試非常的重要,但也別把測試當萬靈丹,它只能幫忙測出有涵蓋到的情境 (假設測試的情境、準備的答案、寫的測試都是對的),依然無法測出沒想到的情境,未來再修改 code 時,也可能發現原本考量的情境已經變了,這時便需要調整測試本身
測試本身,其實就可以寫成 30 天的文章,自成一個生態圈,且還有許多相關的 Gem 相輔相成,像是 factory_bot、Database Cleaner、timecop、Capybara、SimpleCov、FakeRedis...等,將來有機會再視情況寫成文章...
本篇其實寫的蠻精簡的 XD (逃,下篇會講另一個測試套件 Cucumber
鐵人賽文章連結:https://ithelp.ithome.com.tw/articles/10242906
medium 文章連結:https://link.medium.com/M8qWBUbd19
本文同步發布於 小菜的 Blog https://riverye.com/
備註:之後文章修改更新,以個人部落格為主